/** * */ package com.teefun.context; import java.util.Properties; import javax.annotation.Resource; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * Databse configuration. * * @author Rajh * */ @Configuration @EnableTransactionManagement @PropertySource({ "classpath:db.properties" }) public class DataBaseConfig { /** * Env for properties. */ @Resource private Environment env; /** * @return the default data source */ @Bean public DataSource defaultDataSource() { final BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(this.env.getProperty("jdbc.driverClassName")); dataSource.setUrl(this.env.getProperty("jdbc.url")); dataSource.setUsername(this.env.getProperty("jdbc.user")); dataSource.setPassword(this.env.getProperty("jdbc.pass")); return dataSource; } /** * @return the JPA entity manager */ @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() { final LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); factoryBean.setDataSource(this.defaultDataSource()); factoryBean.setPackagesToScan(new String[] { "com.teefun.db" }); final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setShowSql(true); vendorAdapter.setGenerateDdl(true); factoryBean.setJpaVendorAdapter(vendorAdapter); factoryBean.setJpaProperties(this.hibernateProperties()); return factoryBean; } /** * @return the transaction manager */ @Bean public PlatformTransactionManager transactionManager() { final JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(this.entityManagerFactoryBean().getObject()); return transactionManager; } /** * @return ExceptionTranslation */ @Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { return new PersistenceExceptionTranslationPostProcessor(); } /** * @return custom hibernate properties */ private Properties hibernateProperties() { return new Properties() { { this.setProperty("hibernate.hbm2ddl.auto", DataBaseConfig.this.env.getProperty("hibernate.hbm2ddl.auto")); this.setProperty("hibernate.dialect", DataBaseConfig.this.env.getProperty("hibernate.dialect")); this.setProperty("hibernate.globally_quoted_identifiers", "true"); } }; } }